.flags = IORESOURCE_BUSY | IORESOURCE_MEM
};
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
static struct resource system_rom_resource = {
.name = "System ROM",
.start = 0xf0000,
.end = 0xc7fff,
.flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
};
-#endif
static struct resource video_ram_resource = {
.name = "Video RAM area",
#define STANDARD_IO_RESOURCES \
(sizeof standard_io_resources / sizeof standard_io_resources[0])
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
#define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
static int __init romchecksum(unsigned char *rom, unsigned long length)
unsigned char *rom;
int i;
+#ifdef CONFIG_XEN
/* Nothing to do if not running in dom0. */
if (!is_initial_xendomain())
return;
+#endif
/* video rom */
upper = adapter_rom_resources[0].start;
start = adapter_rom_resources[i++].end & ~2047UL;
}
}
-#endif
/*
* Point at the empty zero page to start with. We map the real shared_info
{
int i;
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST) || !defined(CONFIG_XEN)
probe_roms();
-#endif
for (i = 0; i < nr_map; i++) {
struct resource *res;
u8 *addr;
struct irq_routing_table *rt;
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
+#ifdef CONFIG_XEN
+ if (!is_initial_xendomain())
+ return NULL;
+#endif
if (pirq_table_addr) {
rt = pirq_check_routing_table((u8 *) isa_bus_to_virt(pirq_table_addr));
if (rt)
if (rt)
return rt;
}
-#endif
return NULL;
}
#include <linux/kernel.h>
#include <linux/ctype.h>
#include <linux/init.h>
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
#include <asm/smp.h>
#include <asm/ipi.h>
-#else
-#include <asm/apic.h>
-#include <asm/apicdef.h>
-#include <asm/genapic.h>
-#endif
#include <xen/evtchn.h>
DECLARE_PER_CPU(int, ipi_to_irq[NR_IPIS]);
local_irq_restore(flags);
}
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
static int xen_apic_id_registered(void)
{
/* better be set */
Dprintk("%s\n", __FUNCTION__);
return physid_isset(smp_processor_id(), phys_cpu_present_map);
}
-#endif
static unsigned int xen_cpu_mask_to_apicid(cpumask_t cpumask)
{
struct genapic apic_xen = {
.name = "xen",
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
.int_delivery_mode = dest_LowestPrio,
-#endif
.int_dest_mode = (APIC_DEST_LOGICAL != 0),
.int_delivery_dest = APIC_DEST_LOGICAL | APIC_DM_LOWEST,
.target_cpus = xen_target_cpus,
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
.apic_id_registered = xen_apic_id_registered,
-#endif
.init_apic_ldr = xen_init_apic_ldr,
.send_IPI_all = xen_send_IPI_all,
.send_IPI_allbutself = xen_send_IPI_allbutself,
#define IORESOURCE_ROM (IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM)
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST) || !defined(CONFIG_XEN)
static struct resource system_rom_resource = {
.name = "System ROM",
.start = 0xf0000,
{ .name = "Adapter ROM", .start = 0, .end = 0,
.flags = IORESOURCE_ROM }
};
-#endif
#define ADAPTER_ROM_RESOURCES \
(sizeof adapter_rom_resources / sizeof adapter_rom_resources[0])
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST) || !defined(CONFIG_XEN)
static struct resource video_rom_resource = {
.name = "Video ROM",
.start = 0xc0000,
.end = 0xc7fff,
.flags = IORESOURCE_ROM,
};
-#endif
static struct resource video_ram_resource = {
.name = "Video RAM area",
.flags = IORESOURCE_RAM,
};
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST) || !defined(CONFIG_XEN)
#define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
static int __init romchecksum(unsigned char *rom, unsigned long length)
unsigned char *rom;
int i;
+#ifdef CONFIG_XEN
+ /* Nothing to do if not running in dom0. */
+ if (!is_initial_xendomain())
+ return;
+#endif
+
/* video rom */
upper = adapter_rom_resources[0].start;
for (start = video_rom_resource.start; start < upper; start += 2048) {
start = adapter_rom_resources[i++].end & ~2047UL;
}
}
-#endif
static __init void parse_cmdline_early (char ** cmdline_p)
{
void __init setup_arch(char **cmdline_p)
{
unsigned long kernel_end;
-
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
struct e820entry *machine_e820;
struct xen_memory_map memmap;
-#endif
#ifdef CONFIG_XEN
/* Register a call for panic conditions. */
* Request address space for all standard RAM and ROM resources
* and also for regions reported as reserved by the e820.
*/
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
probe_roms();
+#ifdef CONFIG_XEN
if (is_initial_xendomain()) {
machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
e820_reserve_resources(machine_e820, memmap.nr_entries);
} else
- e820_reserve_resources(e820.map, e820.nr_map);
-#elif defined(CONFIG_XEN)
- e820_reserve_resources(e820.map, e820.nr_map);
-#else
- probe_roms();
- e820_reserve_resources(e820.map, e820.nr_map);
#endif
+ e820_reserve_resources(e820.map, e820.nr_map);
request_resource(&iomem_resource, &video_ram_resource);
request_resource(&ioport_resource, &standard_io_resources[i]);
}
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
+#ifdef CONFIG_XEN
if (is_initial_xendomain()) {
e820_setup_gap(machine_e820, memmap.nr_entries);
free_bootmem(__pa(machine_e820), PAGE_SIZE);
}
-#elif !defined(CONFIG_XEN)
+#else
e820_setup_gap(e820.map, e820.nr_map);
#endif
}
break;
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
case IOCTL_PRIVCMD_MMAP: {
#define PRIVCMD_MMAP_SZ 32
privcmd_mmap_t mmapcmd;
privcmd_mmap_entry_t __user *p;
int i, rc;
+ if (!is_initial_xendomain())
+ return -EPERM;
+
if (copy_from_user(&mmapcmd, udata, sizeof(mmapcmd)))
return -EFAULT;
unsigned long addr, mfn;
int i;
+ if (!is_initial_xendomain())
+ return -EPERM;
+
if (copy_from_user(&m, udata, sizeof(m))) {
ret = -EFAULT;
goto batch_err;
break;
}
break;
-#endif
default:
ret = -EINVAL;
/* arch/xen/i386/kernel/setup.c */
extern start_info_t *xen_start_info;
-#ifdef CONFIG_XEN
+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
#define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN)
#else
#define is_initial_xendomain() 0